import torch
import torch.nn as nn

'''
这段代码是一个简单的PyTorch示例，用于计算神经网络的交叉熵损失。我将使用一个生活中的例子来解释这段代码。

假设你是一名老师，你的学生们正在参加一场考试，考试有4个题目。你的学生们需要从4个选项中选择一个答案。你的学生们的答案是由神经网络给出的，每个学生的答案都是一个包含4个值的列表，这4个值分别代表了他们选择每个选项的可能性。例如，[0.1, 0.2, 0.3, 0.4]表示学生选择第一个选项的可能性为10%，选择第二个选项的可能性为20%，以此类推。

你的学生们的实际答案是由你给出的，你的答案是一个包含2个值的列表，这2个值分别代表了两个学生的答案。例如，[2, 0]表示第一个学生选择了第三个选项，第二个学生选择了第一个选项。

你使用交叉熵损失函数来计算你的学生们的答案和你的答案之间的差异。交叉熵损失函数的计算公式是：L = -1/n * Σ(y * log(p) + (1 - y) * log(1 - p))，其中y是你的答案，p是你的学生们的答案，n是学生的数量。这个公式的意思是，如果你的答案和你的学生们的答案越接近，那么损失就越小。

在这段代码中，你的学生们的答案是output，你的答案是target，你使用nn.CrossEntropyLoss()来创建一个交叉熵损失函数，然后使用这个函数来计算损失。最后，你打印出损失的值。
'''
# 假设神经网络输出结果的形状为(2, 4)，表示有2个样本，每个样本有4个类别的预测值
output = torch.tensor([[0.1, 0.2, 0.3, 0.4], [1.2, 1.1, 1.0, 0.9]])

# 目标值的形状也为(2,)，表示两个样本的实际类别索引
target = torch.tensor([2, 0])

# 使用交叉熵损失函数
criterion = nn.CrossEntropyLoss()

# 计算损失
loss = criterion(output, target)
print(loss.item())


if __name__ == '__main__':
    print("over")